package cn.rengy.tpa.wxmp.component.auth;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.apache.http.Consts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ComponentAuthManager {

	private static Logger logger = LoggerFactory.getLogger(ComponentAuthManager.class);

	/* 方式一：授权注册页面扫码授权 */
	private static final String PCAUTH_URL = "https://mp.weixin.qq.com/cgi-bin/componentloginpage";
	/* 方式二：点击移动端链接快速授权*/
	private static final String WXAUTH_URL = "https://mp.weixin.qq.com/safe/bindcomponent?action=bindcomponent&no_scan=1";
	

	/**
	 * 方式一：授权注册页面扫码授权
	 * @param component_appid
	 * @param pre_auth_code
	 * @param redirectURI
	 * @param auth_type 要授权的帐号类型， 1则商户扫码后，手机端仅展示公众号、2表示仅展示小程序，3表示公众号和小程序都展示。如果为未制定，则默认小程序和公众号都展示。第三方平台开发者可以使用本字段来控制授权的帐号类型。
	 * @return
	 */
	public static String generatePcAuthURI(String component_appid,String pre_auth_code,String redirectURI, int auth_type) {
		StringBuffer url = new StringBuffer(PCAUTH_URL);
		url.append("?component_appid=").append(component_appid)
		.append("&pre_auth_code=").append(pre_auth_code)
		.append("&redirect_uri=").append(urlEncode(redirectURI))
		.append("&auth_type=").append(auth_type);
		return url.toString();
	}

	
	/**
	 * 
	 * @param component_appid
	 * @param pre_auth_code
	 * @param redirectURI
	 * @param auth_type 要授权的帐号类型：1则商户点击链接后，手机端仅展示公众号、2表示仅展示小程序，3表示公众号和小程序都展示。如果为未指定，则默认小程序和公众号都展示。第三方平台开发者可以使用本字段来控制授权的帐号类型。
	 * @return
	 */
	public static String generateWxAuthURI(String component_appid,String pre_auth_code,String redirectURI, int auth_type) {
		StringBuffer url = new StringBuffer(WXAUTH_URL);
		url.append("&component_appid=").append(component_appid)
		.append("&pre_auth_code=").append(pre_auth_code)
		.append("&redirect_uri=").append(urlEncode(redirectURI))
		.append("&auth_type=").append(auth_type)
		.append("#wechat_redirect");
		return url.toString();
	}		

	/**
	 * 使用UTF-8进行URL编码
	 *
	 * @param str
	 * @return
	 */
	private static String urlEncode(String str) {
		String result = null;
		try {
			result = URLEncoder.encode(str, Consts.UTF_8.name());
		} catch (UnsupportedEncodingException e) {
			// never throws
		}
		return result;
	}

}
